// /**
//  * @param {string} s
//  * @return {boolean}
//  */
// var isValid = function (s) {
  let res = []
  for (let i = 0; i < s.length; i++) {
    if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
      res.push(s[i])
    } else {
      if (res.length > 0) {
        let char = res[res.length - 1]
        if (s[i] == '}' && char == '{') res.pop()
        else if (s[i] == ']' && char == '[') res.pop()
        else if (s[i] == ')' && char == '(') res.pop()
        else res.push(s[i])
      } else res.push(s[i])
    }
  }
  return res.length == 0 ? true : false
// }

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
  if (s.length == 1 || s.length % 2 != 0) return false
  let map = new Map()
  for (let i = 0; i < s.length; i++) {
    if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
      map.set(s[i], (map.get(s[i]) || 0) + 1)
    } else {
      if (s[i] == ')') map.set('(', map.get('(') - 1)
      if (s[i] == ']') map.set('[', map.get('[') - 1)
      if (s[i] == '}') map.set('{', map.get('{') - 1)
    }
  }

  return Math.max(...map.values())==0?true:false
}

isValid("([)]")